//输入一个整数数组，实现一个函数来调整该数组中数字的顺序，使得所有奇数在数组的前半部分，所有偶数在数组的后半部分。 
//
// 
//
// 示例： 
//
// 
//输入：nums = [1,2,3,4]
//输出：[1,3,2,4] 
//注：[3,1,2,4] 也是正确的答案之一。 
//
// 
//
// 提示： 
//
// 
// 0 <= nums.length <= 50000 
// 0 <= nums[i] <= 10000 
// 
// Related Topics 数组 双指针 排序 👍 227 👎 0


package leetcode.editor.cn;

import com.leetcode.utils.PrintUtil;

//Java：调整数组顺序使奇数位于偶数前面
public class DiaoZhengShuZuShunXuShiQiShuWeiYuOuShuQianMianLcof {
    public static void main(String[] args) {
        Solution solution = new DiaoZhengShuZuShunXuShiQiShuWeiYuOuShuQianMianLcof().new Solution();
        // TO TEST
        PrintUtil.printArray(solution.exchange(new int[]{1, 1, 1, 1, 1, 1, 1}));
        PrintUtil.printArray(solution.exchange(new int[]{1}));
        PrintUtil.printArray(solution.exchange(new int[]{2, 2, 2, 2, 2, 2, 2, 2}));
        PrintUtil.printArray(solution.exchange(new int[]{1, 2, 3, 4, 5, 6, 7}));
    }

    //leetcode submit region begin(Prohibit modification and deletion)
    class Solution {
        public int[] exchange(int[] nums) {
            int l = 0, h = nums.length - 1;
            while (l < h) {
                // 往后找到第一个偶数为止
                while (nums[l] % 2 == 1 && l < nums.length - 1) {
                    l++;
                }
                while (nums[h] % 2 == 0 && h > 0) {
                    h--;
                }
                if (l < h) {
                    int tmp = nums[l];
                    nums[l] = nums[h];
                    nums[h] = tmp;
                }
            }

            return nums;
        }
    }
//leetcode submit region end(Prohibit modification and deletion)

}
